{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv(\"FE_pima-indians-diabetes.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Triceps_skin_fold_thickness_Missing</th>\n",
       "      <th>Plasma_glucose_concentration_Missing</th>\n",
       "      <th>blood_pressure_Missing</th>\n",
       "      <th>serum_insulin_Missing</th>\n",
       "      <th>BMI_Missing</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.866045</td>\n",
       "      <td>-0.031990</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>0.166619</td>\n",
       "      <td>0.468492</td>\n",
       "      <td>1.425995</td>\n",
       "      <td>-0.647760</td>\n",
       "      <td>-0.080951</td>\n",
       "      <td>-0.218515</td>\n",
       "      <td>1.026390</td>\n",
       "      <td>-0.120545</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.205066</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-0.852200</td>\n",
       "      <td>-0.365061</td>\n",
       "      <td>-0.190672</td>\n",
       "      <td>-0.647760</td>\n",
       "      <td>-0.080951</td>\n",
       "      <td>-0.218515</td>\n",
       "      <td>1.026390</td>\n",
       "      <td>-0.120545</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.233880</td>\n",
       "      <td>2.016662</td>\n",
       "      <td>-0.693761</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-1.332500</td>\n",
       "      <td>0.604397</td>\n",
       "      <td>-0.105584</td>\n",
       "      <td>1.543781</td>\n",
       "      <td>-0.080951</td>\n",
       "      <td>-0.218515</td>\n",
       "      <td>1.026390</td>\n",
       "      <td>-0.120545</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.073567</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.695245</td>\n",
       "      <td>-0.540642</td>\n",
       "      <td>-0.633881</td>\n",
       "      <td>-0.920763</td>\n",
       "      <td>-1.041549</td>\n",
       "      <td>-0.647760</td>\n",
       "      <td>-0.080951</td>\n",
       "      <td>-0.218515</td>\n",
       "      <td>-0.974289</td>\n",
       "      <td>-0.120545</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>0.504422</td>\n",
       "      <td>-2.679076</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>0.316566</td>\n",
       "      <td>1.549303</td>\n",
       "      <td>5.484909</td>\n",
       "      <td>-0.020496</td>\n",
       "      <td>-0.647760</td>\n",
       "      <td>-0.080951</td>\n",
       "      <td>-0.218515</td>\n",
       "      <td>-0.974289</td>\n",
       "      <td>-0.120545</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.639947                      0.866045       -0.031990   \n",
       "1  -0.844885                     -1.205066       -0.528319   \n",
       "2   1.233880                      2.016662       -0.693761   \n",
       "3  -0.844885                     -1.073567       -0.528319   \n",
       "4  -1.141852                      0.504422       -2.679076   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.670643      -0.181541  0.166619   \n",
       "1                    -0.012301      -0.181541 -0.852200   \n",
       "2                    -0.012301      -0.181541 -1.332500   \n",
       "3                    -0.695245      -0.540642 -0.633881   \n",
       "4                     0.670643       0.316566  1.549303   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  Triceps_skin_fold_thickness_Missing  \\\n",
       "0                    0.468492  1.425995                            -0.647760   \n",
       "1                   -0.365061 -0.190672                            -0.647760   \n",
       "2                    0.604397 -0.105584                             1.543781   \n",
       "3                   -0.920763 -1.041549                            -0.647760   \n",
       "4                    5.484909 -0.020496                            -0.647760   \n",
       "\n",
       "   Plasma_glucose_concentration_Missing  blood_pressure_Missing  \\\n",
       "0                             -0.080951               -0.218515   \n",
       "1                             -0.080951               -0.218515   \n",
       "2                             -0.080951               -0.218515   \n",
       "3                             -0.080951               -0.218515   \n",
       "4                             -0.080951               -0.218515   \n",
       "\n",
       "   serum_insulin_Missing  BMI_Missing  Target  \n",
       "0               1.026390    -0.120545       1  \n",
       "1               1.026390    -0.120545       0  \n",
       "2               1.026390    -0.120545       1  \n",
       "3              -0.974289    -0.120545       0  \n",
       "4              -0.974289    -0.120545       1  "
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['pregnants', 'Plasma_glucose_concentration', 'blood_pressure',\n",
      "       'Triceps_skin_fold_thickness', 'serum_insulin', 'BMI',\n",
      "       'Diabetes_pedigree_function', 'Age',\n",
      "       'Triceps_skin_fold_thickness_Missing',\n",
      "       'Plasma_glucose_concentration_Missing', 'blood_pressure_Missing',\n",
      "       'serum_insulin_Missing', 'BMI_Missing', 'Target'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "columns = train.columns\n",
    "print(columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [],
   "source": [
    "use_data =  ['Triceps_skin_fold_thickness_Missing',\n",
    "       'Plasma_glucose_concentration_Missing', 'blood_pressure_Missing',\n",
    "       'serum_insulin_Missing', 'BMI_Missing', 'Target']\n",
    "X_train = train.drop(use_data,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.866045</td>\n",
       "      <td>-0.031990</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>0.166619</td>\n",
       "      <td>0.468492</td>\n",
       "      <td>1.425995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.205066</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-0.852200</td>\n",
       "      <td>-0.365061</td>\n",
       "      <td>-0.190672</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.233880</td>\n",
       "      <td>2.016662</td>\n",
       "      <td>-0.693761</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-1.332500</td>\n",
       "      <td>0.604397</td>\n",
       "      <td>-0.105584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.073567</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.695245</td>\n",
       "      <td>-0.540642</td>\n",
       "      <td>-0.633881</td>\n",
       "      <td>-0.920763</td>\n",
       "      <td>-1.041549</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>0.504422</td>\n",
       "      <td>-2.679076</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>0.316566</td>\n",
       "      <td>1.549303</td>\n",
       "      <td>5.484909</td>\n",
       "      <td>-0.020496</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.639947                      0.866045       -0.031990   \n",
       "1  -0.844885                     -1.205066       -0.528319   \n",
       "2   1.233880                      2.016662       -0.693761   \n",
       "3  -0.844885                     -1.073567       -0.528319   \n",
       "4  -1.141852                      0.504422       -2.679076   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.670643      -0.181541  0.166619   \n",
       "1                    -0.012301      -0.181541 -0.852200   \n",
       "2                    -0.012301      -0.181541 -1.332500   \n",
       "3                    -0.695245      -0.540642 -0.633881   \n",
       "4                     0.670643       0.316566  1.549303   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  \n",
       "0                    0.468492  1.425995  \n",
       "1                   -0.365061 -0.190672  \n",
       "2                    0.604397 -0.105584  \n",
       "3                   -0.920763 -1.041549  \n",
       "4                    5.484909 -0.020496  "
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feat_names = X_train.columns\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<768x8 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 6144 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#sklearn的学习器大多之一稀疏数据输入，模型训练会快很多\n",
    "#查看一个学习器是否支持稀疏数据，可以看fit函数是否支持: X: {array-like, sparse matrix}.\n",
    "#可自行用timeit比较稠密数据和稀疏数据的训练时间\n",
    "from scipy.sparse import csr_matrix\n",
    "X_train = csr_matrix(X_train)#压缩稀疏矩阵的存储方式\n",
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1\n",
       "1    0\n",
       "2    1\n",
       "3    0\n",
       "4    1\n",
       "Name: Target, dtype: int64"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train = train['Target']\n",
    "y_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "lr = LogisticRegression(solver='liblinear')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "loss = cross_val_score(lr, X_train, y_train, cv=5, scoring='neg_log_loss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.48797856, 0.53011593, 0.4562292 , 0.422546  , 0.48392885])"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.47615970944434044"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-loss.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# log似然损失调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [],
   "source": [
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tuned_parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_penalty= LogisticRegression(solver='liblinear',multi_class='ovr')#multi_class是什么意思\n",
    "grid_nll= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss',return_train_score=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "             estimator=LogisticRegression(C=1.0, class_weight=None, dual=False,\n",
       "                                          fit_intercept=True,\n",
       "                                          intercept_scaling=1, l1_ratio=None,\n",
       "                                          max_iter=100, multi_class='ovr',\n",
       "                                          n_jobs=None, penalty='l2',\n",
       "                                          random_state=None, solver='liblinear',\n",
       "                                          tol=0.0001, verbose=0,\n",
       "                                          warm_start=False),\n",
       "             iid='warn', n_jobs=None,\n",
       "             param_grid={'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],\n",
       "                         'penalty': ['l1', 'l2']},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "             scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 231,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_nll.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.47602784004722737\n",
      "{'C': 1, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_nll.best_score_)\n",
    "print(grid_nll.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'logloss')"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_nll.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid_nll.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid_nll.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid_nll.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    plt.errorbar(x_axis, -test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    #plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'logloss')"
      ]
     },
     "execution_count": 234,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i, value in enumerate(penaltys):\n",
    "\n",
    "    plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "l1与l2都是在C=1处取最小值，总体来说感觉l2稍微好一点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 正确率调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [],
   "source": [
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "lr_ac = LogisticRegression(solver='liblinear',multi_class='ovr')\n",
    "grid_ac= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='accuracy',return_train_score=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "             estimator=LogisticRegression(C=1.0, class_weight=None, dual=False,\n",
       "                                          fit_intercept=True,\n",
       "                                          intercept_scaling=1, l1_ratio=None,\n",
       "                                          max_iter=100, multi_class='ovr',\n",
       "                                          n_jobs=None, penalty='l2',\n",
       "                                          random_state=None, solver='liblinear',\n",
       "                                          tol=0.0001, verbose=0,\n",
       "                                          warm_start=False),\n",
       "             iid='warn', n_jobs=None,\n",
       "             param_grid={'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],\n",
       "                         'penalty': ['l1', 'l2']},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "             scoring='accuracy', verbose=0)"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_ac.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7747395833333334\n",
      "{'C': 0.1, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "print(grid_ac.best_score_)\n",
    "print(grid_ac.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'logloss')"
      ]
     },
     "execution_count": 228,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEGCAYAAABLgMOSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXwW1b3H8c8vC4QdAgHCZliiQAigImLdqoJStIICVW+rdLG2vfba2opLta5VabHL7S5SrfZaNxBBQUVxQa2CqOy7uBAIiyCbEJbkd/+YCQYI4clDnkye5Pt+vaaznTPPb2ybn3POmTPm7oiIiFRWStQBiIhIclICERGRuCiBiIhIXJRAREQkLkogIiISl7SoA6hOrVq18pycnKjDEBFJKu+9995n7p518PE6lUBycnKYM2dO1GGIiCQVM/ukvONqwhIRkbgogYiISFyUQEREJC51qg9ERKTU3r17KSgooKioKOpQaoyMjAw6dOhAenp6TOWVQESkTiooKKBJkybk5ORgZlGHEzl3Z9OmTRQUFNC5c+eY6qgJS0TqpKKiIlq2bKnkETIzWrZsWaknMiUQEamzlDwOVNl/HkogIiIxuuT+t7nk/rejDqPGUAKJgf5HIyKJ0Lhx4/3bgwcPpnnz5lxwwQXllr366qvp27cvPXv2pEGDBvTt25e+ffsyYcKESv3m+++/zwsvvHBUcZdSJ7qISA0wevRodu7cyf3331/u+b/85S8AfPzxx1xwwQXMnTs3rt95//33WbhwIYMHD4471lJ6AolB4dZdrN68M+owRKQWO+ecc2jSpElcdVesWMF5553HiSeeyBlnnMHy5csBePzxx+nVqxd9+vThrLPOYteuXdx55508+uijcT29HExPIDEo2lvChu27ee+TzZx4TGbU4YhIFbvj2UUsXrvtiOUWFwZlYmnS7tmuKbd9Pe+oY4vFVVddxfjx4+natStvvfUWP/7xj5k+fTp33HEHr732Gm3atGHLli00aNCAW2+9lYULF/KHP/zhqH9XCSQGnTIbsmXnXkZPmM+0a04nIz016pBERADYsmUL77zzDsOHD99/bN++fQCceuqpXHHFFYwcOZKLL764yn9bCSQGqSlGl6xGLF23nd+/vJybvtYj6pBEpArF+qRQ+uTxxA9OSWQ4leLutGrVqtw+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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_ac.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid_ac.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid_ac.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid_ac.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    plt.errorbar(x_axis, -test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    #plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'logloss')"
      ]
     },
     "execution_count": 229,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i, value in enumerate(penaltys):\n",
    "\n",
    "    plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以正确率为损失函数，最优参数为C=0.1,penalty='L2'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as cPickle\n",
    "cPickle.dump(grid_nll.best_estimator_, open(\"FE_ diabetes_nll.pkl\", 'wb'))\n",
    "cPickle.dump(grid_ac.best_estimator_, open(\"FE_ diabetes_ac.pkl\", 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n",
       "                   intercept_scaling=1, l1_ratio=None, max_iter=100,\n",
       "                   multi_class='ovr', n_jobs=None, penalty='l1',\n",
       "                   random_state=None, solver='liblinear', tol=0.0001, verbose=0,\n",
       "                   warm_start=False)"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_nll.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,\n",
       "                   intercept_scaling=1, l1_ratio=None, max_iter=100,\n",
       "                   multi_class='ovr', n_jobs=None, penalty='l2',\n",
       "                   random_state=None, solver='liblinear', tol=0.0001, verbose=0,\n",
       "                   warm_start=False)"
      ]
     },
     "execution_count": 239,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_ac.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
